Telegram Group & Telegram Channel
🧩 Задача для SQL-аналитиков: "Пропавшие продажи"

📖 Описание задачи

У вас есть таблица sales, где хранятся данные о продажах:


CREATE TABLE sales (
sale_id INT PRIMARY KEY,
sale_date DATE,
product_id INT,
quantity INT,
price DECIMAL(10,2)
);

INSERT INTO sales (sale_id, sale_date, product_id, quantity, price) VALUES
(1, '2024-01-01', 101, 1, 100.00),
(2, '2024-01-02', 102, 2, 150.00),
-- ...
-- остальные данные
;


Каждый день формируется отчёт, где суммируются продажи по дням:


SELECT sale_date, SUM(quantity * price) AS total_sales
FROM sales
GROUP BY sale_date;


Вчера сумма в отчёте была 1,000,000. Сегодня — 980,000, хотя новых записей не удаляли.

📝 Ваша задача:

1. Найти, какие записи "исчезли" из отчёта, если данных в таблице sales фактически не удаляли.
2. Определить, почему эти записи больше не попадают в итоговый запрос.
3. Исправить отчёт, чтобы сумма снова стала 1,000,000.

Ограничения:

- Таблица не изменилась по количеству строк.
- Никто не менял код запроса.
- sale_date, quantity, price остались без изменений.

Подсказка: возможно, дело в NULL, JOIN или неправильной агрегации.

🕵️ Что проверяет задача:

- Знание SQL-агрегации
- Понимание NULL и работы SUM
- Умение анализировать запросы «не через код», а через их результат
- Навык находить «скрытые» ошибки данных (например, sale_date стал NULL)

💡 Решение:

При проверке выяснится, что часть записей имеет `sale_date = NULL` (например, кто-то обновил поле
sale_date на NULL).

Итоговый запрос:

```sql
SELECT sale_date, SUM(quantity * price) AS total_sales
FROM sales
GROUP BY sale_date;
```

не учитывает строки, где `sale_date IS NULL`, потому что
GROUP BY игнорирует NULL как отдельную группу (не попадает ни в один существующий `sale_date`).

Чтобы увидеть эти записи:

```sql
SELECT sale_date, COUNT(*), SUM(quantity * price)
FROM sales
GROUP BY sale_date;
```

Для восстановления суммы нужно добавить обработку NULL, например:

```sql
SELECT COALESCE(sale_date, 'unknown') AS sale_date, SUM(quantity * price) AS total_sales
FROM sales
GROUP BY COALESCE(sale_date, 'unknown');
```

Теперь сумма снова будет 1,000,000, а "пропавшие" продажи попадут в отдельную категорию
unknown.

🎯 Эта задача учит:

Всегда думать о данных, а не только о коде
Проверять поля на NULL даже там, где их не ожидаешь
Уметь объяснять ошибки «бизнес-заказчику», а не только исправлять запрос

🔥 Отличная тренировка внимательности и понимания нюансов SQL-агрегации!

@sqlhub



tg-me.com/sqlhub/1872
Create:
Last Update:

🧩 Задача для SQL-аналитиков: "Пропавшие продажи"

📖 Описание задачи

У вас есть таблица sales, где хранятся данные о продажах:


CREATE TABLE sales (
sale_id INT PRIMARY KEY,
sale_date DATE,
product_id INT,
quantity INT,
price DECIMAL(10,2)
);

INSERT INTO sales (sale_id, sale_date, product_id, quantity, price) VALUES
(1, '2024-01-01', 101, 1, 100.00),
(2, '2024-01-02', 102, 2, 150.00),
-- ...
-- остальные данные
;


Каждый день формируется отчёт, где суммируются продажи по дням:


SELECT sale_date, SUM(quantity * price) AS total_sales
FROM sales
GROUP BY sale_date;


Вчера сумма в отчёте была 1,000,000. Сегодня — 980,000, хотя новых записей не удаляли.

📝 Ваша задача:

1. Найти, какие записи "исчезли" из отчёта, если данных в таблице sales фактически не удаляли.
2. Определить, почему эти записи больше не попадают в итоговый запрос.
3. Исправить отчёт, чтобы сумма снова стала 1,000,000.

Ограничения:

- Таблица не изменилась по количеству строк.
- Никто не менял код запроса.
- sale_date, quantity, price остались без изменений.

Подсказка: возможно, дело в NULL, JOIN или неправильной агрегации.

🕵️ Что проверяет задача:

- Знание SQL-агрегации
- Понимание NULL и работы SUM
- Умение анализировать запросы «не через код», а через их результат
- Навык находить «скрытые» ошибки данных (например, sale_date стал NULL)

💡 Решение:

При проверке выяснится, что часть записей имеет `sale_date = NULL` (например, кто-то обновил поле
sale_date на NULL).

Итоговый запрос:

```sql
SELECT sale_date, SUM(quantity * price) AS total_sales
FROM sales
GROUP BY sale_date;
```

не учитывает строки, где `sale_date IS NULL`, потому что
GROUP BY игнорирует NULL как отдельную группу (не попадает ни в один существующий `sale_date`).

Чтобы увидеть эти записи:

```sql
SELECT sale_date, COUNT(*), SUM(quantity * price)
FROM sales
GROUP BY sale_date;
```

Для восстановления суммы нужно добавить обработку NULL, например:

```sql
SELECT COALESCE(sale_date, 'unknown') AS sale_date, SUM(quantity * price) AS total_sales
FROM sales
GROUP BY COALESCE(sale_date, 'unknown');
```

Теперь сумма снова будет 1,000,000, а "пропавшие" продажи попадут в отдельную категорию
unknown.

🎯 Эта задача учит:

Всегда думать о данных, а не только о коде
Проверять поля на NULL даже там, где их не ожидаешь
Уметь объяснять ошибки «бизнес-заказчику», а не только исправлять запрос

🔥 Отличная тренировка внимательности и понимания нюансов SQL-агрегации!

@sqlhub

BY Data Science. SQL hub


Warning: Undefined variable $i in /var/www/tg-me/post.php on line 283

Share with your friend now:
tg-me.com/sqlhub/1872

View MORE
Open in Telegram


Data Science SQL hub Telegram | DID YOU KNOW?

Date: |

If riding a bucking bronco is your idea of fun, you’re going to love what the stock market has in store. Consider this past week’s ride a preview.The week’s action didn’t look like much, if you didn’t know better. The Dow Jones Industrial Average rose 213.12 points or 0.6%, while the S&P 500 advanced 0.5%, and the Nasdaq Composite ended little changed.

How Does Telegram Make Money?

Telegram is a free app and runs on donations. According to a blog on the telegram: We believe in fast and secure messaging that is also 100% free. Pavel Durov, who shares our vision, supplied Telegram with a generous donation, so we have quite enough money for the time being. If Telegram runs out, we will introduce non-essential paid options to support the infrastructure and finance developer salaries. But making profits will never be an end-goal for Telegram.

Data Science SQL hub from tw


Telegram Data Science. SQL hub
FROM USA